<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        //检测数组的两种方式
        var arr = [];
        console.log(arr instanceof Array);
        console.log(Array.isArray(arr));
        //添加、删除数组方法
        //push 在数组后面添加一个或多个元素在这个数组里面 push 推
        var arr1 = [1, 2, 3];
        arr1.push(4, 'pink');
        console.log(arr1.push('啊哈')); //返回的是目前数组的长度
        console.log(arr1);
        //unshift 在数组的前面添加一个或多个元素
        arr1.unshift(0);
        console.log(arr1.unshift(12)); //同样返回的是数组长度
        console.log(arr1);
        //pop 删除数组最后一个元素
        arr1.pop(); //不用跟上参数
        console.log(arr1.pop()); //删除那个元素就给你返回那个元素
        console.log(arr1);
        //shift 删除的是数组第一个元素
        arr1.shift();
        console.log(arr1.shift()); //删除那个元素就返回那一个元素
        console.log(arr1);

        //筛选数组
        var newarr = [];
        for (var i = 0; i < arr1.length; i++) {
            if (arr1[i] < 3) {
                newarr.push(arr1[i]); //用这种方法比newarr[newarr.length]=arr1[i];简单
            }
        }
        console.log(newarr);

        //数组排序
        //翻转数组  利用提供的方法使用
        arr1.reverse();
        console.log(arr1);
        //数组排序（冒泡）
        arr1.sort(function(a, b) {
            return a - b; //按照升序的方法来排序
            // return b - a; //按照降序的方法来排序
        });
        console.log(arr1);

        // indexOf（） 从前往后查找，找到数组索引的方法 Of的O大写        建议记一个
        // 有多个重复的数值时，他只满足第一个符合的索引号，如果没有该元素，则返回的是-1
        console.log(arr1.indexOf(2));

        //lastIndexOf(),从后往前查找          
        console.log(arr1.lastIndexOf(1));

        //将数组转换成字符串
        var arr2 = [1, 23, 4];
        console.log(arr2.toString());
        console.log(Array.isArray(arr2));




        //用join（分隔符）,将数组变为字符串类型的
        var arr3 = ['pink', '老师'];
        console.log(arr3.join('-')); //可以添加自己想要的分隔符
        console.log(arr3.join('*'));
        console.log('-----------');
        let bt = arr3.join('.')
        console.log(typeof bt);
        console.log(bt);

        //基本包装类型
        var str = 'abcd';
        console.log(str.length);
        var temp = new String('abcd');
        str = temp;
        temp = null; //这就是将一个字符串包装起来，具有某种功能

        //字符串的不可变性
        // 字符串创建的数据是不会消失的，他开辟的是一个地址空间，在写程序的时候不要大量的创建字符串数据

        //根据字符返回位置的下标
        var str1 = 'how are you';
        console.log(str1);
        console.log(str1.indexOf('o'));
        //str.indexOf('要查找的字符'，从第几个开始查找)，同理str.lastindexOf()也是一样的

        var str2 = 'I see you monsters,I see you pain';
        var index = str2.indexOf('e');
        var number = 0;
        while (index !== -1) {
            console.log(index);
            number++;
            index = str2.indexOf('e', index + 1);
        }
        console.log(number);
        //重点，根据位置返回字符
        //1.charAt(index)
        console.log('-------');
        console.log(str2.charAt(4));
        //2.charCodeAt(index)  返回的是字符对应的ASCLL码值
        console.log(str2.charCodeAt(2));
        // html5新增的str[index]
        console.log(str2[4]);
        const uy = 'qw ertyui opasdfghjklzxcvbnm'
        console.log(uy.indexOf('w'));
        console.log(uy.charAt(1));
        console.log('-----');
        //统计出现次数最多的字符
        var o = {};
        for (var i = 0; i < str2.length; i++) {
            var chars = str2.charAt(i); //chars是字符串的每一个字符
            if (o[chars]) { //o[chars]输出的是o对象里的值
                o[chars]++;
            } else {
                o[chars] = 1;
            }
        }
        console.log(o);
        var max = 0;
        var ch = '';
        for (var k in o) {
            if (o[k] > max) {
                max = o[k];
                //k得到的是属性名
                ch = k;
            }
        }
        console.log(max);
        console.log("得到的最多的字符是：" + ch);

        // 重点 字符串的操作方法
        //1.拼接以及截取字符串
        // 用+号，或则用concat（'字符串1'，字符串2），通常是用的+号
        var str3 = 'blue';
        console.log(str3.concat('red'));
        //字符串的截取substr(第几个开始截取的索引号，截取几个)
        var ch1 = '天王盖地虎，宝塔镇河妖';
        console.log(ch1.substr(6, 5));

        //替换字符串replace（'你要替换的字符'，'替换成的字符'），他只能替换第一个字符，可通过循环来多次使用
        var ch2 = 'I see you monster,I see you pain';
        while (ch2.indexOf('e') !== -1) {
            ch2 = ch2.replace('e', '*');
        }
        console.log(ch2);
        //字符串转换成数组split('分隔符')
        console.log(ch2.split(','));
        console.log(ch2.split('&'));
        //toUpperCase()//转换大写
        //toLowerCase()//转换小写

        //对于null，我们想创建一个变量对象，但还没想好，可以先赋值为null var time=null;
    </script>
</head>

<body>

</body>

</html>